<?php
/**
 * Created by PhpStorm.
 * User: xiari336
 * Date: 2019/3/21
 * Time: 15:38
 */
//抽象被观察者
abstract class Subject{
    //定义一个观察者数组
    private $observers = [];
    //增加观察者方法
    public function addObserver(Observer $observer){
        $this->observers[] = $observer;
        echo "添加观察者成功".PHP_EOL;

    }
    //删除观察者方法
    public function delObserver(Observer $observer){
        //判断是否有该观察者存在
        $key = array_search($observer, $this->observers);
        //值虽然相同 但有可能不是同一个对象 ,所以使用全等判断
        if($observer === $this->observers[$key]){

            unset($this->observers[$key]);
            echo '删除观察者成功'.PHP_EOL;
        }else{
            echo '观察者不存在，无需删除'.PHP_EOL;
        }
    }

    //通知所有观察者
    public function notifyObservers(){
        foreach($this->observers as $observer){
            $observer->update();
        }
    }

}